#!/bin/bash

# 定义备份的路径
BACKUP_DIR=/data/backup/db
# 保存备份文件的最大数量
MAX_BACKUPS=20

# 文件名称
FILE_NAME=db.sh
# 数据库信息
DB_PORT=3306
DB_HOST=39.99.249.176
DB_USER=root
DB_PWD=Dev@sd123
DATABASE=nursing-system




# 获取当前的时间作为文件名的一部分
DATETIME=$(date +%Y%m%d_%H%M%S)
# 当前文件位置
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")



# 创建备份目录
mkdir -p "${BACKUP_DIR}"

# 执行备份
backup_database() {
    echo "=======开始 backup_database========"
    local host="$1"
    local port="$2"
    local user="$3"
    local password="$4"
    local database="$5"
    local backup_file="${BACKUP_DIR}/${DATETIME}-${database}.sql"

    # 使用 mysqldump 进行备份
    mysqldump --host="${host}" --user="${user}" --password="${password}" --port="${port}" "${database}" > "${backup_file}" 2>&1

    if [ $? -eq 0 ]; then
        echo "Backup completed successfully: ${backup_file}"
    else
        echo "Backup failed with error: $(tail -n 1)"
    fi
}

# 清理旧备份
cleanup_backups() {
    echo "=======开始 cleanup_backups $((MAX_BACKUPS))========"
    # 排序备份文件，并保留最新的 MAX_BACKUPS 个文件
    find "${BACKUP_DIR}" -type f -name "*.sql" | sort -r | tail -n +$((MAX_BACKUPS + 1)) | xargs rm -f
    echo "Cleanup completed. Old backups removed."
}

# 检查定时任务
check_cron() {
    echo "=======开始 check_cron========"
    if [ -f /etc/crontab ]; then
        # 检查是否存在备份任务
        if grep -q "${FILE_NAME}" /etc/crontab; then
            echo "定时任务已存在，无需添加。"
        else
            # 添加备份任务到 crontab
            echo "0 2 * * * root ${SCRIPT_DIR}/${FILE_NAME}" >> /etc/crontab
            echo "定时任务已添加。"
        fi
    else
        echo "Error: /etc/crontab文件不存在。"
        exit 1
    fi

}

# 开始备份
echo "=======开始备份========"

# 执行备份
backup_database "${DB_HOST}" "${DB_PORT}" "${DB_USER}" "${DB_PWD}" "${DATABASE}"

# 清理旧备份
cleanup_backups

# 检查定时任务
check_cron

# 结束脚本
echo "备份和清理过程完成。"
